
/**
 * 1、使用 System 类中的 类方法 arraycopy 可以实现【复制数组元素】，其用法为:
 *      System.arraycopy( source , srcBegin , destination , destBegin , length )
 *      其中:
 *      source 表示 源数组
 *      srcBegin 表示 从源数组 的 哪个位置开始复制
 *      destination  表示 目标数组
 *      destBegin 表示 在 目标数组 的 哪个位置开始 存放复制后的元素值
 *      length 表示 复制的元素个数
 * 
 * 2、使用 System.arraycopy 复制数组元素时，源数组 和 目标数组 可以是同一个数组
 */
public class Goose {

    public void traversal(int[] array) {
        // 为什么判断 array 不等于 null ?
        // 为什么判断 array.length 大于零 ?
        if (array != null && array.length > 0) {
            for (int i = 0; i < array.length; i++) {
                System.out.print( array[i] );
                System.out.print( (i < array.length - 1) ? " , " : "" );
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        Goose g = new Goose();

        int[] first = new int[] { 10 ,  7 , 20 , 5 , 16 , 30 , 40 , 50  } ;
        g.traversal( first );

        int[] second = new int[ 20 ];
        g.traversal( second );

        // System.arraycopy( source , srcBegin , destination , destBegin , length )
        System.arraycopy( first , 3 , second , 10 ,  4 ); // 注意是 arraycopy 不是 copyarray
        g.traversal( second );

        // System.out.println( second[ -1 ] ); // 运行时会抛出 java.lang.ArrayIndexOutOfBoundsException ( 数组下标越界异常 )
        // 访问数组中的元素时如果下标超出了 [ 0 , array.length - 1 ] 范围 则会抛出 ArrayIndexOutOfBoundsException
        // System.out.println( second[ second.length ] ); // 运行时会抛出ArrayIndexOutOfBoundsException

        int[] third = new int[ 10 ];
        third[ 0 ] = 78 ;
        third[ 1 ] = 99 ;
        third[ 2 ] = 100 ;
        third[ 3 ] = 22 ;
        third[ 4 ] = 25 ;

        g.traversal( third );
        System.arraycopy( third , 0 , third , 5 ,  5 ); 
        g.traversal( third );

    }

}
